---- Data -----------------------------|-----------------------------------------------------

Aval. space:	From C2/220D to C2/23EC
A-in:		Target id bits (formated)
X-in:		Attacker
Y-in:		Target
Carry-out:	0 = hit, 1 = miss

---- Main -----------------------------|-----------------------------------------------------
Main function

C2/220D	48		PHA
C2/220E	5A		PHY
C2/220F	DA		PHX
C2/2210	E2 20		SEP #$20	Set A as 8-bit

C2/2212	64 FE		STZ $FE		nulls animation

C2/2214	20 3D 22	JSR $223D 	get hit rate
C2/2217	20 C7 22	JSR $22C7	change hit rate
C2/221A	20 46 22	JSR $2246	set hit or miss			
C2/221D	20 CC 23	JSR $23CC	clean-up status
C2/2220	20 5A 22	JSR $225A	set character animation
C2/2223	20 88 22	JSR $2288	set attack animation
			
C2/2226	C2 20		REP #$20	Set A as 16-bit
C2/2228	FA		PLX
C2/2229	7A		PLY
C2/222A	68		PLA
C2/222B	60		RTS

---- Type selector --------------------|-----------------------------------------------------
Check if attack is physical or magical. Set up X as Y or Y+1 accordantly

C2/222C	BB		TYX
C2/222D	AD A2 11	LDA $11A2
C2/2230	4A		LSR
C2/2231	B0 01		BCS $2234	
C2/2233	E8		INX
C2/2234	60		RTS

---- Random number --------------------|-----------------------------------------------------
Get random number between [1,255]

C2/2235	20 5A 4B	JSR $4B5A	random number [0, 255]
C2/2238	C9 00		CMP #$00
C2/223A	F0 F9		BEQ $2235	get new random number if it was zero
C2/223C	60		RTS

---- Get hit rate ---------------------|-----------------------------------------------------
Get standard hit rate for target. Select between physical or magical hit rate

C2/223D	20 2C 22	JSR $222C	select physical or magical
C2/2240	BD 54 3B	LDA $3B54,X	load physical or magical hit rate for target
C2/2243	85 EE		STA $EE
C2/2245	60		RTS

---- Set hit or miss ------------------|-----------------------------------------------------
Set hit rate as #$01 (miss) or #$FF (hit)

C2/2246	A5 EE		LDA $EE		load hit rate
C2/2248	F0 0F		BEQ $2259	exit if no hit rate
			
C2/224A	20 35 22	JSR $2235	random number [1, 255]

C2/224D	C5 EE		CMP $EE		compare hit rate
C2/224F	B0 04		BCS $2255	set miss	
			
**/****	set hit
			
C2/2251	A9 FF		LDA #$FF
C2/2253	80 02		BRA $2257	save hit rate
			
**/****	set miss

C2/2255	A9 01		LDA #$01
C2/2257	85 EE		STA $EE
C2/2259	60		RTS

---- Set character animation ----------|-----------------------------------------------------
Set character animation when attack miss. Or set prefixed animation for character

**/****	Check if target can do animation

C2/225A	B9 E4 3E     	LDA $3EE4,Y
C2/225D	89 1A        	BIT #$1A			
C2/225F	D0 26        	BNE $2287   	exit if target has clear, m-tek or zombie

C2/2261	C0 08        	CPY #$08			
C2/2263	B0 22        	BCS $2287	exit if target is monster

C2/2265	A5 FE		LDA $FE		load animation
C2/2267	D0 16		BNE $227F	set prefixed animation
	
**/****	Set animation based on equipment	

C2/2269	A5 EE		LDA $EE		load hit rate
C2/226B	F0 1A		BEQ $2287	ignore animation if no hit rate
C2/226D	30 18		BMI $2287	ignore animation if hit

C2/226F	20 2C 22	JSR $222C	select physical or magical
C2/2272	BD E4 3C	LDA $3CE4,X	load animation of avaliable equipment
C2/2275	F0 10		BEQ $2287	exit if no equipment animation
			
C2/2277	20 2A 52	JSR $522A	choose a random bit set and clear all others
C2/227A	20 F0 51	JSR $51F0	convert bit set to [0,7] value. Store at X
C2/227D	8A		TXA
C2/227E	1A		INC

**/****	Set character animation

C2/227F	48		PHA		save value for animation
	
C2/2280	98		TYA 
C2/2281	4A		LSR 
C2/2282	AA		TAX		convert [0,2,4,6] index to [0,1,2,3] index
					
C2/2283	68		PLA 		recovery value for animation
C2/2284	9D AA 00	STA $00AA,X	set dodge animation for character
C2/2287	60		RTS

---- Set attack animation -------------|-----------------------------------------------------
Set attack animation: ignore, miss or hit. Also set carry for further operations in caller.

**/****	Selector: ignore, miss or hit animation

C2/2288	A5 EE		LDA $EE		load hit rate
C2/228A	F0 18		BEQ $22A4	if hit rate = 00h, ignore animation
C2/228C	30 18		BMI $22A6	if hit rate = FFh, ignore animation and use hit animation
			
**/****	Standard miss animation		if hit rate = 01h, set miss animation

C2/228E	A9 02		LDA #$02
C2/2290	04 B2        	TSB $B2		set no critical and ignore true knight
C2/2292	9C 89 3A     	STZ $3A89	turn off random weapon spellcast
C2/2295	AD 1C 34     	LDA $341C			
C2/2298	F0 0A        	BEQ $22A4	ignore if current strike is missable weapon spellcast

C2/229A	C2 20		REP #$20	set A as 16-bit
C2/229C	B9 18 30     	LDA $3018,Y
C2/229F	0C 5A 3A     	TSB $3A5A	set target as missed
C2/22A2	E2 20		SEP #$20	set A as 8-bit

**/****	Standard ignore animation

C2/22A4	38		SEC
C2/22A5	60		RTS
			
**/****	standard hit animation

C2/22A6	18		CLC
C2/22A7	60		RTS

---- Single target -- -----------------|-----------------------------------------------------
Check conditions for single target

C2/22A8	C0 08		CPY #$08		
C2/22AA	B0 0E		BCS $22BA	not allow if entity is monster

C2/22AC	AD A9 11	LDA $11A9	special effect. They can change hit rate or targets
C2/22AF	D0 09		BNE $22BA	not allow if attack has special effects

C2/22B1	AD C9 3E	LDA $3EC9	number of targets
C2/22B4	C9 01		CMP #$01
C2/22B6	D0 02		BNE $22BA	not allow if more than 1 target

C2/22B8	38		SEC		check ok
C2/22B9	60		RTS		
			
C2/22BA	18		CLC		check not ok
C2/22BB	60		RTS		

---- Clear status ---------------------|-----------------------------------------------------
Clear all status to be set by attack

C2/22BC	C2 20		REP #$20
C2/22BE	9C AA 11	STZ $11AA
C2/22C1	9C AC 11	STZ $11AC
C2/22C4	E2 20		SEP #$20
C2/22C6	60		RTS

---- Change hit rate ------------------|-----------------------------------------------------
change hit rate based on many conditions

**/****	always miss if true: death protected flag

C2/22C7	AD A2 11	LDA $11A2
C2/22CA	89 02		BIT #$02	attack bit: spell miss if death protected
C2/22CC	F0 07		BEQ $22D5	skip if not

C2/22CE	B9 A1 3A	LDA $3AA1,Y
C2/22D1	89 04		BIT #$04	
C2/22D3	D0 54		BNE $2329	set miss

**/****	always miss if true: undead xor dead flag

C2/22D5	AD A2 11	LDA $11A2
C2/22D8	89 04		BIT #$04	attack bit: spell miss if not dead targets
C2/22DA	F0 08		BEQ $22E4	skip if not

C2/22DC	B9 E4 3E	LDA $3EE4,Y
C2/22DF	59 95 3C	EOR $3C95,Y 	death status XOR undead attribute
C2/22E2	10 45		BPL $2329	set miss

**/****	always hit: can't be dodged flag

C2/22E4	AD A4 11	LDA $11A4
C2/22E7	89 20		BIT #$20	attack bit: Can't be dodged
C2/22E9	D0 42		BNE $232D	set hit

**/****	special hit rate: Lv X spell

C2/22EB	AD A4 11	LDA $11A4
C2/22EE	89 40		BIT #$40	attack bit: hit only multiple of hit rate
C2/22F0	F0 13		BEQ $2305	skip if not

C2/22F2	AE A8 11	LDX $11A8   	hit rate
C2/22F5	F0 32		BEQ $2329	set miss if hit rate is zero
C2/22F7	E0 0A		CPX #$0A
C2/22F9	B0 07		BCS $2302	set fixed hit rate
			
  /****	set hit rate as 1/(hit rate) if value is in [1,9] range
  
C2/22FB	A9 FF		LDA #$FF
C2/22FD	20 E3 23	JSR $23E3	division by hit rate
C2/2300	80 2D		BRA $232F	set hit rate
  			
  /****	set fixed hit rate if value is in [10, 255] range
  
C2/2302	8A		TXA
C2/2303	80 2A		BRA $232F	set hit rate
  						
**/****	special hit rate: stamina defense

C2/2305	AD A4 11	LDA $11A4
C2/2308	89 10		BIT #$10	attack bit: stamina can block flag
C2/230A	F0 13		BEQ $231F	skip if not
			
C2/230C	B9 40 3B	LDA $3B40,Y	stamina
C2/230F	C9 40		CMP #$40	compare with max stamina
C2/2311	90 02		BCC $2315	
C2/2313	A9 40		LDA #$40	set stamina to 64 if stamina > 64
			
C2/2315	0A		ASL		stamina = stamina * 2
C2/2316	20 61 28	JSR $2861	calculate stamina hit rate

C2/2319	4A		LSR		# will make average of (stamina hit rate, 128)
C2/231A	18		CLC		# hit rate = (stamina hit rate)/2 + (128)/2
C2/231B	69 40		ADC #$40	#
C2/231D	80 10		BRA $232F	set hit rate

**/****	selector

C2/231F	20 2C 22	JSR $222C	select physical or magical
C2/2322	B0 31		BCS $2355	select physical hit rate
C2/2324	80 0C		BRA $2332	select magical hit rate

---- Set hit rate ---------------------|-----------------------------------------------------
Auxiliary functions to set hit rate

**/****	Always ignore

C2/2326	64 EE		STZ $EE
C2/2328	60		RTS

**/****	Always miss

C2/2329	A9 01		LDA #$01
C2/232B	80 02		BRA $232F	set hit rate

**/****	Always hit

C2/232D	A9 FF		LDA #$FF

**/****	Set prefixed hit rate

C2/232F	85 EE		STA $EE
C2/2331	60		RTS

---- Magical hit rate -----------------|-----------------------------------------------------

**/****	always ignore if true: Reflect

C2/2332	AD A3 11	LDA $11A3
C2/2335	89 02		BIT #$02	attack bit: not reflectable
C2/2337	D0 10		BNE $2349	skip if not

C2/2339	B9 F8 3E	LDA $3EF8,Y
C2/233C	10 0B		BPL $2349	skip if target doesn't have reflect

C2/233E	C2 20		REP #$20	set A as 16-bit
C2/2340	B9 18 30	LDA $3018,Y	target id
C2/2343	04 A6		TSB $A6		set as reflected
C2/2345	E2 20		SEP #$20	set A as 8-bit

C2/2347	80 DD		BRA $2326	set ignore

**/****	always hit if true: Clear, Petrify, Sleep, Stop, Freeze

C2/2349	F4 50 80	PEA $8050	clear, petrify, sleep
C2/234C	F4 10 02	PEA $0210	stop, freeze
C2/234F	20 64 58	JSR $5864	check target status
C2/2352	90 D9		BCC $232D	set hit if any status set

C2/2354	60		RTS

---- Physical hit rate ----------------|-----------------------------------------------------

**/****	Golem

C2/2355	AD 36 3A	LDA $3A36	golem HP (low byte)
C2/2358	0D 37 3A	ORA $3A37	golem HP (high byte)
C2/235B	F0 11		BEQ $236E	skip if golem HP is zero

C2/235D	20 A8 22	JSR $22A8	check single target
C2/2360	90 0C		BCC $236E	skip if not

C2/2362	A9 06		LDA #$06
C2/2364	85 FE		STA $FE		Set golem animation

C2/2366	20 BC 22	JSR $22BC	clear status to set
C2/2369	8C 82 3A	STY $3A82	save character target in "Golem blocked" byte
C2/236C	80 BF	        BRA $232D	set hit	

**/****	Dog

C2/236E	B9 F9 3E	LDA $3EF9,Y
C2/2371	0A		ASL 		target bit: dog block
C2/2372	10 18	        BPL $238C	skip if not

C2/2374	20 A8 22	JSR $22A8	check single target
C2/2377	90 13		BCC $238C	skip if not
			
C2/2379	20 35 22	JSR $2235	random number: [1, 255]
C2/237C	C9 40		CMP #$40	dog block: hit rate
C2/237E	B0 0C		BCS $238C	skip if not
			
C2/2380	A9 07		LDA #$07	
C2/2382	85 FE		STA $FE		set dog animation

C2/2384	20 BC 22	JSR $22BC	clear status to set    		
c2/2387	8C 83 3A	STY $3A83	save character target in "Dog blocked" byte
C2/238A	80 A1		BRA $232D	set hit

**/****	always miss if true: Clear, Image

C2/238C	F4 10 04	PEA $0410	clear, image
C2/238F	F4 00 00	PEA $0000
C2/2392	20 64 58	JSR $5864	check target status
C2/2395	90 92		BCC $2329	set miss if status set

**/****	always hit if true: Petrify, Sleep, Stop, Freeze

C2/2397	F4 40 80	PEA $8040	petrify, sleep
C2/239A	F4 10 02	PEA $0210	stop, freeze
C2/239D	20 64 58	JSR $5864	check target status
C2/23A0	90 8B		BCC $232D	set hit if status set

**/****	fixed hit if true: Blind

C2/23A2	BD E4 3E	LDA $3EE4,X
C2/23A5	4A		LSR		target has blind status 
C2/23A6	90 09		BCC $23B1 	skip if not
	
C2/23A8	20 35 22	JSR $2235	random number: [1, 255]
C2/23AB	C9 40		CMP #$40
C2/23AD	B0 02		BCS $23B1	skip if not

C2/23AF	80 15		BRA $23C6	set hit

**/****	fixed miss if true: Beads

C2/23B1	B9 58 3C	LDA $3C58,Y
C2/23B4	89 04		BIT #$04	beads tag
C2/23B6	F0 0D		BEQ $23C5	skip if not
	
C2/23B8	20 35 22	JSR $2235	random number: [1, 255]
C2/23BB	C9 40		CMP #$40
C2/23BD	B0 06		BCS $23C5	skip if not

C2/23BF	A9 05		LDA #$05	
C2/23C1	85 FE		STA $FE		set dodge animation
C2/23C3	80 04		BRA $23C9	set miss
			
**/****	exit

C2/23C5	60		RTS

**/****	redirection

C2/23C6	4C 2D 23	JMP $232D	set hit
C2/23C9	4C 29 23	JMP $2329	set miss

---- Status clean up ------------------|-----------------------------------------------------
Clean up image status

C2/23CC	AD AB 11	LDA $11AB
C2/23CF	89 04		BIT #$04	attack bit: Image status
C2/23D1	D0 0F		BNE $23E2	skip if image status is set

C2/23D3	20 35 22	JSR $2235	random number: [1, 255]
C2/23D6	C9 40		CMP #$40		
C2/23D8	B0 08		BCS $23E2
	
**/****	Dispel image status
	
C2/23DA	B9 FD 3D	LDA $3DFD,Y 
C2/23DD	09 04	        ORA #$04
C2/23DF	99 FD 3D	STA $3DFD,Y	

C2/23E2	60		RTS

---- Division Function ----------------|-----------------------------------------------------
Division Function

C2/23E3	EB		XBA
C2/23E4	A9 00		LDA #$00	clean high byte of A
C2/23E6	EB		XBA
C2/23E7	20 92 47	JSR $4792	Division function
C2/23EA	60		RTS

